#include <stdio.h>
#include <unistd.h>
#include "system_calls.h"
#include "sched_mod.h"

int main(int argc, char *argv[]) {

  int **m1, i, j, k, c, **m2, **m3, SIZE;
  SIZE = atoi(argv[1]);

  m1 = (int**) malloc(sizeof(int**)*SIZE);
  for(i=0; i<SIZE; i++) {
    m1[i] = (int*) malloc(sizeof(int*)*SIZE);
    for(j=0; j<SIZE; j++){
      m1[i][j] = (int) malloc(sizeof(int));
    }
  }

  m2 = (int**) malloc(sizeof(int**)*SIZE);
  for(i=0; i<SIZE; i++) {
    m2[i] = (int*) malloc(sizeof(int*)*SIZE);
    for(j=0; j<SIZE; j++){
      m2[i][j] = (int) malloc(sizeof(int));
    }
  }

  m3 = (int**) malloc(sizeof(int**)*SIZE);
  for(i=0; i<SIZE; i++) {
    m3[i] = (int*) malloc(sizeof(int*)*SIZE);
    for(j=0; j<SIZE; j++){
      m3[i][j] = (int) malloc(sizeof(int));
    }
  }

  func_init (getpid(), 0.020, 0.050);
  c = 0;
  while (c<10000) {
    func_start_loop(getpid());
    for(i=0;i<SIZE;i++) {
      for(j=0;j<SIZE;j++) {
        for(k=0;k<SIZE;k++) {
          m3[i][j] += m1[i][k]*m2[k][j];
        }
      }
    }
    func_end_loop(getpid());
  }
  func_term(getpid());

  return 0;

}
